﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using WaterBill.BUS;
using WaterBill.DTO;
using DevExpress.XtraEditors.Controls;

namespace WaterBill.GUI
{
    public partial class frmManageUser : DevExpress.XtraEditors.XtraForm
    {
        BUS_Users busUser = new BUS_Users();
        BUS_Permission busPer = new BUS_Permission();
        public frmManageUser()
        {
            InitializeComponent();
        }

        private void frmManageUser_Load(object sender, EventArgs e)
        {
            loadDataForm();
        }

        private void loadDataForm()
        {
            gcUser.DataSource = busUser.BUS_Users_GetAll();

            DataTable dtStatus = new DataTable();
            dtStatus.Columns.Add("Value", typeof(int));
            dtStatus.Columns.Add("Text");
            DataRow drStatus;
            drStatus = dtStatus.NewRow();
            drStatus["Value"] = 1;
            drStatus["Text"] = "Hoạt động";
            dtStatus.Rows.Add(drStatus);
            drStatus = dtStatus.NewRow();
            drStatus["Value"] = 2;
            drStatus["Text"] = "Không hoạt động";
            dtStatus.Rows.Add(drStatus);
            cbbStatus.DataSource = dtStatus;
            cbbStatus.DisplayMember = "Text";
            cbbStatus.ValueMember = "Value";
            cbbStatus.SelectedIndex = 0;

            cbbPermission.DataSource = busPer.DAL_Permission_GetAll();
            cbbPermission.DisplayMember = "Text";
            cbbPermission.ValueMember = "PermissionId";
            cbbPermission.SelectedIndex = 0;

            btnAdd.Enabled = true;
            btnEdit.Enabled = false;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnDelete.Enabled = false;
            EnableFalseField();
            EmptyField();
        }

        private void btnPrint_Click(object sender, EventArgs e)
        {
            gcUser.ShowPrintPreview();
        }

        private void gvUser_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            btnAdd.Enabled = true;
            btnEdit.Enabled = true;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnDelete.Enabled = true;
            EnableFalseField();
            try
            {
                txtUserId.Text = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "UserId"));
                txtUsername.Text = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "UserName"));
                txtFullname.Text = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "FullName"));
                txtAddress.Text = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "Address"));
                txtPhone.Text = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "Phone"));
                cbbPermission.SelectedValue = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "PermissionId"));
                cbbStatus.SelectedValue = Convert.ToString(gvUser.GetRowCellValue(e.FocusedRowHandle, "Status"));
                txtRowHandle.Text = e.FocusedRowHandle.ToString();
            }
            catch
            {
                btnEdit.Enabled = false;
            }
        }

        private void btnEdit_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = true;
            btnSave.Enabled = true;
            btnCancel.Enabled = true;
            btnDelete.Enabled = true;
            EnableTrueField();
            txtUsername.Enabled = false;
            if (frmMain._DtUser.Rows[0]["UserId"].ToString() == txtUserId.Text)
            {
                cbbPermission.Enabled = false;
                cbbStatus.Enabled = false;
            }
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = true;
            btnSave.Enabled = false;
            btnCancel.Enabled = false;
            btnDelete.Enabled = true;
            EnableFalseField();
            if (txtUserId.Text == "")
            {
                btnDelete.Enabled = false;
                EmptyField();
            }
        }

        private void btnAdd_Click(object sender, EventArgs e)
        {
            btnAdd.Enabled = false;
            btnSave.Enabled = true;
            btnCancel.Enabled = true;
            btnEdit.Enabled = false;
            btnDelete.Enabled = false;
            EnableTrueField();
            EmptyField();
        }

        public void EmptyField()
        {
            txtUserId.Text = "";
            txtUsername.Text = "";
            txtFullname.Text = "";
            txtAddress.Text = "";
            txtPhone.Text = "";
            cbbPermission.SelectedIndex = 0;
            cbbStatus.SelectedIndex = 0;
        }
        public void EnableTrueField()
        {
            txtUsername.Enabled = true;
            txtFullname.Enabled = true;
            txtAddress.Enabled = true;
            txtPhone.Enabled = true;
            cbbPermission.Enabled = true;
            cbbStatus.Enabled = true;
        }
        public void EnableFalseField()
        {
            txtUsername.Enabled = false;
            txtFullname.Enabled = false;
            txtAddress.Enabled = false;
            txtPhone.Enabled = false;
            cbbPermission.Enabled = false;
            cbbStatus.Enabled = false;
        }
        private void btnSave_Click(object sender, EventArgs e)
        {
            if (txtUsername.Text != "")
            {
                if (txtFullname.Text != "")
                {
                    if (txtAddress.Text != "")
                    {
                        if (txtPhone.Text != "")
                        {
                            DTO_Users obj = new DTO_Users();
                            obj.UserName = txtUsername.Text;
                            obj.FullName = txtFullname.Text;
                            obj.Address = txtAddress.Text;
                            obj.Phone = txtPhone.Text;
                            obj.PermissionId = Convert.ToInt32(cbbPermission.SelectedValue);
                            obj.Status = Convert.ToInt32(cbbStatus.SelectedValue);
                            if (txtUserId.Text == "")
                            {
                                if (!busUser.BUS_Users_CheckExist(txtUsername.Text))
                                {
                                    if (busUser.BUS_Users_Insert(obj))
                                    {
                                        XtraMessageBox.Show("Thêm thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                        gcUser.DataSource = busUser.BUS_Users_GetAll();
                                        btnEdit.Enabled = false;
                                        btnDelete.Enabled = false;
                                        EmptyField();

                                        btnAdd.Enabled = true;
                                        btnSave.Enabled = false;
                                        btnCancel.Enabled = false;
                                        EnableFalseField();
                                    }
                                    else
                                    {
                                        XtraMessageBox.Show("Không thể thêm được.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                    }
                                }
                                else
                                {
                                    XtraMessageBox.Show("Tên đăng nhập này đã được sử dụng. Xin vui lòng chọn tên đăng nhập khác.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                                }
                            }
                            else
                            {
                                obj.UserId = Convert.ToInt32(txtUserId.Text);
                                if (busUser.BUS_Users_Update(obj))
                                {
                                    XtraMessageBox.Show("Sửa thành công.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "FullName", txtFullname.Text);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "Address", txtAddress.Text);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "PermissionId", cbbPermission.SelectedValue);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "TextPermission", cbbPermission.Text);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "Phone", txtPhone.Text);
                                    gvUser.SetRowCellValue(int.Parse(txtRowHandle.Text), "Status", cbbStatus.SelectedValue);
                                    btnEdit.Enabled = true;
                                    btnDelete.Enabled = true;

                                    btnAdd.Enabled = true;
                                    btnSave.Enabled = false;
                                    btnCancel.Enabled = false;
                                    EnableFalseField();
                                }
                                else
                                {
                                    XtraMessageBox.Show("Không thể sửa được.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                }
                            }
                            
                        }
                        else
                        {
                            XtraMessageBox.Show("Số điện thoại không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                            txtPhone.Focus();
                        }
                    }
                    else
                    {
                        XtraMessageBox.Show("Địa chỉ không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        txtAddress.Focus();
                    }
                }
                else
                {
                    XtraMessageBox.Show("Họ tên không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtFullname.Focus();
                }
            }
            else
            {
                XtraMessageBox.Show("Tên đăng nhập không được bỏ trống", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtUsername.Focus();
            }
        }

        private void btnRefresh_Click(object sender, EventArgs e)
        {
            splashScreenManager1.ShowWaitForm();
            loadDataForm();
            splashScreenManager1.CloseWaitForm();
        }

        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (txtUserId.Text != "")
            {
                int UserId = Convert.ToInt32(txtUserId.Text);
                if (XtraMessageBox.Show("Bạn có chắc là muốn xóa khách hàng có mã sử dụng #" + UserId + "?", "Cảnh báo", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
                    if (UserId != Convert.ToInt32(frmMain._DtUser.Rows[0]["UserId"]))
                    {
                        if (busUser.BUS_Users_Delete(UserId))
                        {
                            XtraMessageBox.Show("Xóa thành công người dùng có mã sử dụng #" + UserId + "", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                            gvUser.DeleteRow(int.Parse(txtRowHandle.Text));
                        }
                        else
                        {
                            XtraMessageBox.Show("Lỗi, không thể xóa người dùng có mã sử dụng #" + UserId + ", vì người dùng này có liên quan tới một số hóa đơn hoặc gặp một lỗi nào đó.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        }
                    }
                    else
                    {
                        XtraMessageBox.Show("Cảnh báo, Người dùng này hiện đang đăng nhập nên không thể xóa được.", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }
            }
        }

        private void btnPrev_Click(object sender, EventArgs e)
        {
            this.gvUser.MovePrev();
        }

        private void btnNext_Click(object sender, EventArgs e)
        {
            this.gvUser.MoveNext();
        }

        
    }

}